import com.fz.entity.Book;
import com.fz.entity.Student;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.query.NativeQuery;
import org.hibernate.query.Query;
import org.junit.Test;


import java.util.List;


/**
 * Created by zhuang on 2017-09-14.
 */
public class Demo {
//本例刚开始数据库是没有book表的,运行这个之后就自动建了表，而且数据也加进去了
    @Test
    public void tt(){
        Configuration cfg=new Configuration().configure();
        SessionFactory sf=cfg.buildSessionFactory();
        Session session=sf.openSession();
        session.beginTransaction();//开启事物
        //添加方法
        /*这种方法也可以
        Book book=new Book();
        book.setPrice(5);
        book.setName("《想当难》");
        session.save(book);
        session.beginTransaction().commit();*/

        //利用原生语句进行的插入

        NativeQuery que=session.createNativeQuery("insert into book(name,price) values(:name,:price)");
        que.setParameter("price",234);
        que.setParameter("name","1400");
        int ii=que.executeUpdate();
        System.out.println(ii);
        session.getTransaction().commit();
        session.beginTransaction().commit();



        //修改方法
//        Book bk=session.get(Book.class,11);
//        bk.setPrice(100);
//        bk.setName("1500");
//        session.beginTransaction().commit();

        //删除功能(这是最简单的，但是效率低，先查，封装对象，然后再删这个对象)
        /*session.delete(session.load(Book.class,2));
        session.beginTransaction().commit();*/


        //删除方法能用，只是为了爆红暂时不清楚
        /*Transaction tx=session.beginTransaction();//开启事物
//        Query  query=session.createQuery("delete from Book where id= :id");
//        query.setParameter("id",6);
        //这上下两种方法都可以，而且语句中带不带from都行
        Query  query=session.createQuery("delete Book where id= ?");
         query.setParameter(0,7);
        int i=query.executeUpdate();
        System.out.println(i);
        tx.commit();*///提交事物



        //查询功能
        //不影响运行结果，不知道为啥from会报红
        Query query1=session.createQuery("from Book");
        List<Book> b=query1.list();
        for (Book bb:b){
            System.out.println(bb.getId()+":"+bb.getName());
        }
        session.close();
    }

    //上面这个例子老师建的，下面是模仿着做的
    @Test
    public void zz(){
        Configuration cfg=new Configuration().configure();
        SessionFactory sf=cfg.buildSessionFactory();
        Session session=sf.openSession();

        Student stu=new Student();
        stu.setName("李四四");
        stu.setScore(44);
        session.beginTransaction().commit();
        session.save(stu);
        session.close();
    }


    //处理teacher表，teacher类
    @Test
    public void te(){
        Configuration cfg=new Configuration().configure();
        SessionFactory sf=cfg.buildSessionFactory();
        Session session=sf.openSession();

        session.beginTransaction().commit();
        session.close();
    }
}
